package com.zhijian.warehouse.manage.service;


import com.zhijian.warehouse.manage.entity.po.Menu;
import com.zhijian.warehouse.manage.entity.vo.request.MenuSearchVo;
import com.zhijian.warehouse.manage.entity.vo.response.MenuByRoleVo;
import com.zhijian.warehouse.manage.entity.vo.response.MenuVo;
import com.zhijian.util.page.Page;

import java.util.List;

/**
 * 系统菜单信息 业务处理层
 *
 * @author HCG
 * @version 1.0
 * @date 2022-01-22 15:30:23
 */
public interface MenuService {

    /**
     * 主键查询
     *
     * @param id
     * @return
     */
    Menu selectById(Long id);

    /**
     * 主键查询vo
     *
     * @param id
     * @return
     */
    MenuVo selectVoById(Long id);

    /**
     * 按照主键删除
     *
     * @param id
     */
    void deleteById(Long id);

    /**
     * 新增
     *
     * @param menu
     * @return
     */
    Long insert(Menu menu);

    /**
     * 更改
     *
     * @param menu
     * @return
     */
    boolean update(Menu menu);

    /**
     * 总数
     *
     * @param menuSearchVo
     * @return
     */
    Integer count(MenuSearchVo menuSearchVo);

    /**
     * 列表
     *
     * @param menuSearchVo
     * @return
     */
    List<MenuVo> selectList(MenuSearchVo menuSearchVo);

    /**
     * 分页查询
     *
     * @param menuSearchVo
     * @return
     */
    Page<MenuVo> selectPage(MenuSearchVo menuSearchVo);

    /**
     * 树形查询
     *
     * @param all
     * @param pid
     * @return
     */
    List<MenuVo> selectTreeList(List<MenuVo> all, Long pid);

    /**
     * 最后渲染的树形数据
     *
     * @return
     */
    List<MenuVo> renderTreeList();

    /**
     * 根据租户ID最后渲染的树形数据
     *
     * @param menuSearchVo
     * @return
     */
    List<MenuVo> renderTreeListBySearch(MenuSearchVo menuSearchVo);

    /**
     * 根据角色id查询菜单数据
     *
     * @param roleId
     * @return
     */
    MenuByRoleVo selectMenuByRoleVoByRoleId(Long roleId);

    /**
     * 根绝角色id渲染菜单树形数据
     *
     * @return
     */
    List<MenuVo> renderTreeListByRoleId(Long roleId);

    /**
     * 根据人员id渲染菜单树形数据
     *
     * @param userId
     * @return
     */
    List<MenuVo> renderTreeListByUserId(Long userId);

    /**
     * 根绝角色id查询菜单vo列表
     *
     * @param roleId
     * @return
     */
    List<MenuVo> selectListByRoleId(Long roleId);

    /**
     * 根绝人员id查询菜单vo列表
     *
     * @param userId
     * @return
     */
    List<MenuVo> selectListByUserId(Long userId);

    /**
     * 根绝角色id查询菜单vo列表，带按钮的
     *
     * @param roleId
     * @return
     */
    List<MenuVo> selectListWithButtonsByRoleId(Long roleId);

    /**
     * 根绝人员id查询菜单vo列表，带按钮的
     *
     * @param userId
     * @return
     */
    List<MenuVo> selectListWithButtonsByUserId(Long userId);

}